/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador;

import BD.MyException;
import Clases.Categoria;
import DAO.DAOCategoria;
import DAO.DAOTarea;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

/**
 *
 * @author ppr
 */
public class ControladorCategoria {

    private List<Categoria> categoriasFiltradaas;

    public boolean guardarCategoria(Categoria cat) {
        try {
            if (DAOCategoria.cargarCategoria(cat)) {
                return true;
            } else {
                return false;
            }
        } catch (MyException e) {
            return false;
        }

    }

    private List<Categoria> cargarCategorias() {
        List<Categoria> categorias = null;
        try {
            categorias = DAOCategoria.getCategorias();
        } catch (MyException e) {          
            return categorias;
        }
        return categorias;
    }

    public DefaultTableModel modelCliente(TableModel modelo) {
        DefaultTableModel model = (DefaultTableModel) modelo;
        categoriasFiltradaas = new ArrayList<Categoria>();
        //////
        int filas = modelo.getRowCount();
        for (int i = 0; filas > i; i++) {
            model.removeRow(0);
        }
        //////
        List<Categoria> categorias = cargarCategorias();
        if (categorias != null) {
            for (Categoria cat : categorias) {
                String[] dato = {cat.getNombre(), cat.getDescripcion()};
                model.addRow(dato);
                categoriasFiltradaas.add(cat);
            }
        } else {
            return null;
        }
        return model;
    }

    public DefaultTableModel filtrar(TableModel modelo, String text) {
        DefaultTableModel model = (DefaultTableModel) modelo;
        categoriasFiltradaas = new ArrayList<Categoria>();
        int filas = modelo.getRowCount();
        for (int i = 0; filas > i; i++) {
            model.removeRow(0);
        }
        //////
        String txt = text.toUpperCase();
        List<Categoria> categorias = cargarCategorias();
        if (categorias != null) {
            for (Categoria cat : categorias) {
                if (cat.getDescripcion().toUpperCase().contains(txt) || cat.getNombre().toUpperCase().contains(txt)) {
                    String[] dato = {cat.getNombre(), cat.getDescripcion()};
                    model.addRow(dato);
                    categoriasFiltradaas.add(cat);
                }
            }
        } else {
            return null;
        }
        return model;
    }

    public int getIdCategoriaByIndex(int selectedRow) {
        return this.categoriasFiltradaas.get(selectedRow).getId_Categoria();
    }

    public Categoria getCategoria(int id) {
        return DAOCategoria.getCategoria(id);
    }

    public boolean modificarCategoria(Categoria cat) {
        try {
            if (DAOCategoria.modificarCategoria(cat)) {
                return true;
            } else {
                return false;
            }

        } catch (MyException e) {
            return false;
        }

    }

    public String elimnarCategoria(int selectedRow) {
        Categoria cat = this.categoriasFiltradaas.get(selectedRow);
        try {
            if (!DAOTarea.existenRelaciones(cat)) {
                if (DAOCategoria.eliminarCategoria(cat)) {
                    return "Categoría eliminada";
                } else {
                    return "No se pudo eliminar la categoría";
                }
            } else {
                return "Existen tareas con esta categoría";
            }

        } catch (MyException e) {
            return "Se produjo un error";
        }
    }
}
